<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<head>
    <th:block th:include="include :: header('目标检测训练任务列表')" />
    <script src="/axios/axios.min.js"></script>
    <style>
        .status-btn {
            display: inline-block;
            padding: 1px 20px;
            margin: 0px;
            margin-top: 5px;
            background-color: #5bc0de; /* 可以根据需要调整颜色 */
            color: white;
            text-decoration: none;
            border-radius: 5px;
            transition: background-color 0.3s;
        }

        .status-btn:hover {
            background-color: #31b0d5; /* 悬停时的颜色变化 */
        }
    </style>
</head>
<body class="gray-bg">
<div class="container-div">
    <div class="row">
        <div class="col-sm-12 search-collapse">
            <form id="formId">
                <div class="select-list">
                    <ul>
                        <li>
                            训练任务名称：<input type="text" name="trainMissionName"/>
                        </li>

                        <li>
                            模型名称：<input type="text" name="modelName"/>
                        </li>

                        <li>
                            训练集名称：<input type="text" name="datasetTrainName"/>
                        </li>

                        <li>
                            验证集名称：<input type="text" name="datasetValName"/>
                        </li>

<!--                        <li>-->
<!--                            batch size：<input type="text" name="batchSize"/>-->
<!--                        </li>-->

<!--                        <li>-->
<!--                            epoch：<input type="text" name="epoch"/>-->
<!--                        </li>-->

                        <li>
                            训练状态：<input type="text" name="status"/>
                        </li>

<!--                        <li>-->
<!--                            早停：<input type="text" name="earlyStop"/>-->
<!--                        </li>-->

<!--                        <li>-->
<!--                            学习率：<input type="text" name="opLr"/>-->
<!--                        </li>-->

<!--                        <li>-->
<!--                            归属用户id：<input type="text" name="userId"/>-->
<!--                        </li>-->

<!--                        <li>-->
<!--                            训练集id：<input type="text" name="datasetTrainId"/>-->
<!--                        </li>-->

<!--                        <li>-->
<!--                            验证集id：<input type="text" name="datasetValId"/>-->
<!--                        </li>-->

<!--                        <li>-->
<!--                            所选模型id：<input type="text" name="modelId"/>-->
<!--                        </li>-->

<!--                        <li>-->
<!--                            创建时间：<input type="text" name="createTime"/>-->
<!--                        </li>-->

<!--                        <li>-->
<!--                            开始时间：<input type="text" name="beginTime"/>-->
<!--                        </li>-->

<!--                        <li>-->
<!--                            结束时间：<input type="text" name="endTime"/>-->
<!--                        </li>-->

<!--                        <li>-->
<!--                            添加到队列的时间：<input type="text" name="timeToQueue"/>-->
<!--                        </li>-->

<!--                        <li>-->
<!--                            是否公开：<input type="text" name="isPublic"/>-->
<!--                        </li>-->

<!--                        <li>-->
<!--                            是否有预训练权重：<input type="text" name="isWeight"/>-->
<!--                        </li>-->

                        <li>
                            <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
                            <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i class="fa fa-refresh"></i>&nbsp;重置</a>
                        </li>
                    </ul>
                </div>
            </form>
        </div>

        <div class="btn-group-sm" id="toolbar" role="group">
            <a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="detection:detectionTrainMission:add">
                <i class="fa fa-plus"></i> 添加
            </a>
            <li>
                <!--                通过点击按钮来切换显示的数据集状态-->
                <a class="status-btn" data-status="self">仅自己</a>
                <a class="status-btn" data-status="all">全部</a>
            </li>
        </div>
        <div class="col-sm-12 select-table table-striped">
            <table id="bootstrap-table" class="table table-bordered" data-mobile-responsive="true"></table>
        </div>
    </div>
</div>
<div th:include="include :: footer"></div>
<script th:inline="javascript">
    var editFlag = [[${@permission.hasPermi('detection:detectionTrainMission:edit')}]];
    var removeFlag = [[${@permission.hasPermi('detection:detectionTrainMission:remove')}]];
    var prefix = ctx + "detection/detectionTrainMission";

    var status = "self"; // 默认显示自己的数据集状态

    var url = prefix + "/list?status=self";
    // var url = prefix + "/list";
    // console.log("url:", url)
    let currentUserId = null;
    var options = null;
    let isAdmin = false; // 是否是管理员

    // 获取是否是管理员
    getIsAdmin().then(function() {
        console.log("获取是否是管理员成功");
        console.log("isAdmin:", isAdmin)
    }).catch(function(error) {
        console.log("获取是否是管理员失败:", error);
    });

    // 页面加载时先获取用户ID
    getUserId().then(function(userId) {
        currentUserId = userId;  // 将用户ID保存在外部变量中
        // 初始化表格配置
    }).catch(function(error) {
        console.log("获取用户ID失败:", error);
    });
    // 按钮点击切换数据集状态
    $(".status-btn").click(function () {
        status = $(this).data("status");
        // console.log("status:", status)
        url = prefix + "/list?status=" + status;
        // console.log("url: ",url)
        // 给options创建url参数

        options.url = url;

        // console.log("status长度:", status.length)
        $.table.destroy()
        // $.table.refresh({url: url});
        $.table.init(options);
    });


    $(function() {
        options = {
            // url: prefix + "/list",
            url:url,
            createUrl: prefix + "/add",
            updateUrl: prefix + "/edit/{id}",
            removeUrl: prefix + "/remove",
            exportUrl: prefix + "/export",
            modalName: "目标检测训练任务",
            showExport: true,
            columns: [
                {
                    field : 'id',
                    title : '',
                    visible: false
                },
                {
                    field : 'trainMissionName',
                    title : '训练任务名称',
                    align: 'center'
                },
                {
                    field : 'modelName',
                    title : '模型名称',
                    align: 'center'
                },
                {
                    field : 'datasetTrainName',
                    title : '训练集名称',
                    align: 'center'
                },
                {
                    field : 'datasetValName',
                    title : '验证集名称',
                    align: 'center'
                },
                {
                    field : 'batchSize',
                    title : 'batch size',
                    align: 'center'
                },
                {
                    field : 'epoch',
                    title : 'epoch',
                    align: 'center'
                },
                {
                    field: 'status',
                    title: '训练状态',
                    align: 'center',
                    formatter: function (value, row, index) {
                        var statusText = '';
                        var color = '';
                        var buttonHtml = '';

                        switch (value) {
                            case '未训练':
                                statusText = '未训练';
                                color = 'gray';
                                break;
                            case '待训练':
                                statusText = '待训练';
                                color = 'orange';
                                break;
                            case '训练中':
                                statusText = '训练中';
                                color = 'blue';
                                break;
                            case '已完成':
                                statusText = '已完成';
                                color = 'green';
                                break;
                            default:
                                statusText = '训练异常';
                                color = 'black';
                                buttonHtml = '<button onclick="viewExceptionLog(\'' + row.id + '\')">查看</button>'; // 添加查看按钮
                        }
                        return '<span style="color: ' + color + ';">' + statusText + '</span>' + buttonHtml;
                    }
                },
                {
                    field : 'earlyStop',
                    title : '早停',
                    align: 'center'
                },
                {
                    field : 'opLr',
                    title : '学习率',
                    align: 'center'
                },
                // {
                //     field : 'userId',
                //     title : '归属用户id',
                //     align: 'center'
                // },
                // {
                //     field : 'datasetTrainId',
                //     title : '训练集id',
                //     align: 'center'
                // },
                // {
                //     field : 'datasetValId',
                //     title : '验证集id',
                //     align: 'center'
                // },
                // {
                //     field : 'modelId',
                //     title : '所选模型id',
                //     align: 'center'
                // },
                {
                    field: 'progress',
                    title: '进度',
                    align: 'center'
                },
                {
                    field : 'createTime',
                    title : '创建时间',
                    align: 'center'
                },
                {
                    field : 'beginTime',
                    title : '开始时间',
                    align: 'center'
                },
                {
                    field : 'endTime',
                    title : '结束时间',
                    align: 'center'
                },
                {
                    field : 'timeToQueue',
                    title : '添加到队列的时间',
                    align: 'center',
                    visible: false
                },
                {
                    field : 'isPublic',
                    title : '是否公开',
                    align: 'center',
                    visible: false
                },
                {
                    field : 'isWeight',
                    title : '是否有预训练权重',
                    align: 'center',
                    visible: false
                },
                {
                    title: '操作',
                    align: 'center',
                    formatter: function(value, row, index) {
                        var actions = [];
                        actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.id + '\')"><i class="fa fa-edit"></i>编辑</a> ');
                        actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.id + '\')"><i class="fa fa-remove"></i>删除</a>');
                        return actions.join('');
                    }
                }]
        };
        $.table.init(options);
    });
    // 获取userId
    async function getUserId() {
        try {
            const response = await axios.get("/getUserRole/getUserId");
            // console.log("请求成功，获取到用户id：", response.data);
            return response.data; // 返回 Promise 结果
        } catch (error) {
            console.log("请求失败，错误信息：", error);
            throw error; // 处理失败时抛出错误
        }
    }

    async function getIsAdmin() {
        try {
            const response = await axios.get("/getUserRole/isAdmin");
            // console.log("请求成功，获取到是否是管理员：", response.data);
            isAdmin = response.data;
            if (isAdmin) {
                console.log("是管理员，可以查看全部数据集");
            } else {
                console.log("不是管理员，只能查看自己的数据集");
            }
        } catch (error) {
            console.log("请求失败，错误信息：", error);
            throw error; // 处理失败时抛出错误
        }
    }
</script>
</body>
</html>